/*
  编写一个算法来判断一个数 n 是不是快乐数。

  「快乐数」 定义为：
  对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
  然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
  如果这个过程 结果为 1，那么这个数就是快乐数。

  输入：n = 19
  输出：true
  解释：
  12 + 92 = 82
  82 + 22 = 68
  62 + 82 = 100
  12 + 02 + 02 = 1

  思路：借助map去存储之前已经得到过的结果
*/

var isHappy = function (n) {
  let m = new Map()

  const getSum = (num) => {
    let sum = 0
    while (num) {
      sum += (num % 10) ** 2
      num = Math.floor(num / 10)
    }
    return sum
  }

  while (true) {
    // n出现过，证明已陷入无限循环
    if (m.has(n)) return false
    if (n === 1) return true
    m.set(n, 1)
    n = getSum(n)
  }
}